package servlet;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import dao.transferObjects.Gae.ProductoTO;

import facade.Producto.FacadeProducto;

import utilidades.ServiciosFile;

/**
 * Servlet implementation class SubirArchivoServlet
 */
public class SubirArchivoServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	private static final String CONTENT_TYPE = "text/html; charset=windows-1252";
    /**
     * @see HttpServlet#HttpServlet()
     */
    public SubirArchivoServlet() {
        super();
    }
    
    public void init(ServletConfig config) throws ServletException
    {
    	super.init(config);
    	Enumeration parameters = config.getInitParameterNames(); 
    	while (parameters.hasMoreElements())
    	{
    		String parameter = (String) parameters.nextElement(); 
    		System.out.println("Parametro nombre : " + parameter); 
    		System.out.println("Parametro valor  : " + config.getInitParameter(parameter));
    	}
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType(CONTENT_TYPE); 
		PrintWriter out = null;
		try
		{
			out = response.getWriter();
		}
		catch (IOException e){} 
		out.println(" GET ");
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		if (ServletFileUpload.isMultipartContent(request))
		{
			String rut_gae="";
			String id_gae="";
			String comentario_gae="";
			String fileName = "";
			String phatFile = "";
			
			ServletFileUpload servletFileUpload = new ServletFileUpload(new DiskFileItemFactory());
			List fileItemsList = null;
			
			try{
				fileItemsList = servletFileUpload.parseRequest(request);
			}
			catch (FileUploadException e1) {}
			
			try{
				rut_gae = request.getParameter("rut_gae");
				id_gae = request.getParameter("id_gae");
				comentario_gae = request.getParameter("comentario_gae");
			}catch(Exception e){
				e.printStackTrace();
			}
			
			FileItem fileItem = null;
			String nombreArchivo = rut_gae+"_"+(new Date()).getTime();	
			
			Iterator it = fileItemsList.iterator();
			while (it.hasNext())
			{
			    FileItem fileItemTemp = (FileItem)it.next();
			    if (!fileItemTemp.isFormField())
			    {
			      	fileItem = fileItemTemp;
			    }
			    else
			    {
			    	if(fileItemTemp.getFieldName().equals("rut"))
			    	{
			    		nombreArchivo=fileItemTemp.getString();
			    	}
			    }
			}
			if (fileItem!=null)
			{
				if (fileItem.getSize() > 0)
				{
					fileName = fileItem.getName();
				  	
				  	phatFile = ServiciosFile.obtenerRutaCrearArchivo(nombreArchivo.toLowerCase(), new Date());
				  	
				  	File saveTo = new File(phatFile);
		      		System.out.println("Archivo guardado como: "+phatFile);
				
					try {
		      			// Verificar directorios
			        	fileItem.write(saveTo);
			        	response.setContentType(CONTENT_TYPE); 
			    		PrintWriter out = response.getWriter(); 
			
						out.println("<?xml version='1.0' encoding='UTF-8'?>");
						out.println("<UploadFile>");
						out.println("<state>OK</state>");
						out.println("<adressLocal>"+fileName+"</adressLocal>");
						out.println("<adressRemote>"+phatFile+"</adressRemote>");
						out.println("</UploadFile>");
		      		}
					catch (Exception e){
		      			System.out.println("Problemas al generar el archivo: "+phatFile);
		      			response.setContentType(CONTENT_TYPE);
		      			PrintWriter out;
						try {
							out = response.getWriter();
							out.println("<?xml version='1.0' encoding='UTF-8'?>");
							out.println("<UploadFile>");
							out.println("<state>ERROR</state>");
							out.println("<adressLocal>"+fileName+"</adressLocal>");
							out.println("<adressRemote>"+phatFile+"</adressRemote>");
							out.println("</UploadFile>");
						} catch (IOException e1) {} 
		      		}
				}
			}
			
			//String directories[]=fileName.split(".pdf");
			String directories[]=fileName.split(".zip");
			
			//Creamos el objeto par guardalo en la BD
			ProductoTO producto = new ProductoTO();
			producto.setRut_gae(Integer.parseInt(rut_gae));
			producto.setId_gae(Integer.parseInt(id_gae));
			producto.setNombre_producto(directories[0]);
			producto.setComentario_gae(comentario_gae);
			producto.setRuta_path(phatFile);
			
			FacadeProducto facPro = new FacadeProducto();
			int resp = facPro.crearProducto(producto);
			if(resp > 0)
				System.out.println("PRODUCTO ALMACENADO");
			else
				System.out.println("PRODUCTO NO ALMACENADO");
			
		}
	}
}
